package com.cy.pj.sys.service.impl;

import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.common.pojo.PageObject;
import com.cy.pj.common.pojo.SysRole;
import com.cy.pj.common.vo.CheckBox;
import com.cy.pj.common.vo.SysRoleMenuVo;
import com.cy.pj.sys.dao.SysRoleDao;
import com.cy.pj.sys.dao.SysRoleMenuDao;
import com.cy.pj.sys.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;

@Service
public class SysRoleServiceImpl implements SysRoleService {
    @Autowired
    private SysRoleDao sysRoleDao;
    @Autowired
   private   SysRoleMenuDao sysRoleMenuDao;

    @Override
    public PageObject<SysRole> findPageObjects(String name, Integer pageCurrent) {
        //1.参数校验
        if(pageCurrent==null||pageCurrent<1)
            throw new IllegalArgumentException("页码值不正确，页码值应该>=1");
        //2.查询总记录数并校验
        int rowCount=sysRoleDao.getRowCount(name);
        if(rowCount==0)
            throw new ServiceException("没有找到对应记录");
        //3.查询当前页记录
        int pageSize=2;//页面大小，暂时可以写成固定值，后续可以从页面获取
        int startIndex=(pageCurrent-1)*pageSize;//分页查询时的起始位置(计算得出)
        List<SysRole> records= sysRoleDao.findPageObjects(name,startIndex,pageSize);
        //4.封装查询结果
//        PageObject<SysRole> po=new PageObject<>();
//        po.setRowCount(rowCount);
//        po.setRecords(records);
//        po.setPageSize(pageSize);
//        po.setPageCurrent(pageCurrent);
//        int pageCount=rowCount/pageSize;
//        if(rowCount%pageSize!=0){
//            pageCount++;
//        }
//        po.setPageCount(pageCount);
//        return po;
        return new PageObject<>(rowCount, records, pageSize, pageCurrent);
    }



    @Override
    public int saveObject(SysRole entity, Integer[] menuIds) {
//1.参数有效性校验
        if (entity == null)
            throw new IllegalArgumentException("保存对象不能为空 ");
        if (StringUtils.isEmpty(entity.getName()))
            throw new IllegalArgumentException("角色名不允许为空 ");
        if (menuIds == null || menuIds.length == 0)
            throw new ServiceException("必须为角色分配权限");
//2.保存角色自身信息
        int rows = sysRoleDao.insertObject(entity);
//3.保存角色菜单关系数据

        sysRoleMenuDao.insertObjects(entity.getId(), menuIds);
//4.返回业务结果
        return rows;
    }
    @Override
    public SysRoleMenuVo findObjectById(Integer id) {
        //1.合法性验证
        if(id==null||id<=0)
            throw new IllegalArgumentException("id 的值不合法");
        //2.执行查询
        SysRoleMenuVo result=sysRoleDao.findObjectById(id);
        //3.验证结果并返回
        if(result==null)
            throw new ServiceException("此记录已经不存在");
        return result;
    }
    @Override
    public int updateObject(SysRole entity,Integer[] menuIds) {
        //1.合法性验证
        if(entity==null)
            throw new IllegalArgumentException("更新的对象不能为空");
        if(entity.getId()==null)
            throw new IllegalArgumentException("id 的值不能为空");

        if(StringUtils.isEmpty(entity.getName()))
            throw new IllegalArgumentException("角色名不能为空");
        if(menuIds==null||menuIds.length==0)
            throw new IllegalArgumentException("必须为角色指定一个权限");

        //2.更新数据
        int rows=sysRoleDao.updateObject(entity);
        if(rows==0)
            throw new ServiceException("对象可能已经不存在");
        sysRoleMenuDao.deleteObjectsByRoleId(entity.getId());
        sysRoleMenuDao.insertObjects(entity.getId(),menuIds);


        //3.返回结果
        return rows;
    }
    @Override
    public List<CheckBox> findObjects() {
        return sysRoleDao.findObjects();
    }

}
